function success = resetFile(srcFileName, dstFileName)
%RESETFILE 重置现有文件
%   此函数用新的文件替换现有文件。当文件被占用无法覆盖时，
%   会提示用户关闭文件后继续操作。主要用于恢复检查清单或配置文件到初始状态。
%
%语法:
%   success = resetFile(srcFileName, dstFileName)
%
%输入参数:
%   srcFileName - 源文件路径（字符串），要复制的模板文件
%   dstFileName - 目标文件路径（字符串），要被替换的现有文件
%
%输出参数:
%   success - 逻辑值，true表示操作成功，false表示操作失败或被取消
%
%说明:
%   - 使用copyfile函数强制覆盖目标文件
%   - 如果复制失败（通常是权限问题），显示用户对话框
%   - 提示用户关闭占用文件的应用程序
%   - 支持用户选择继续重试或取消操作
%   - 递归调用自身直到操作成功或用户取消
%
%文件权限处理:
%   当目标文件被其他程序占用时（如Excel打开的.xlsx文件），
%   copyfile会失败。函数会捕获异常并提供用户友好的解决方案。
%
%用户交互:
%   - 显示权限被拒绝的原因说明
%   - 提供"继续"和"取消"两个选项
%   - "继续"：关闭文件后重试操作
%   - "取消"：放弃操作并返回false
%
%使用场景:
%   - 重置检查清单到空白状态
%   - 恢复配置文件到默认设置
%   - 替换损坏的文件
%   - 更新模板文件
%   - 批量文件重置操作
%
%示例:
%   % 基本文件重置
%   success = resetFile('template.xlsx', 'checklist.xlsx');
%   if success
%       fprintf('文件重置成功\n');
%   else
%       fprintf('文件重置被取消或失败\n');
%   end
%
%   % 重置检查清单文件
%   templateFile = 'templates/Code_Review_Checklist_Template.xlsx';
%   checklistFile = 'DO_01_Planning/checklists/Code_Review_Checklist.xlsx';
%   success = resetFile(templateFile, checklistFile);
%
%   % 批量重置多个文件
%   function resetAllChecklists()
%       checklists = {'Code_Review_Checklist.xlsx', ...
%                    'Model_Review_Checklist.xlsx', ...
%                    'Requirements_Review_Checklist.xlsx'};
%       
%       templateDir = 'templates/';
%       checklistDir = 'DO_01_Planning/checklists/';
%       
%       for i = 1:length(checklists)
%           srcFile = fullfile(templateDir, ['Template_', checklists{i}]);
%           dstFile = fullfile(checklistDir, checklists{i});
%           
%           success = resetFile(srcFile, dstFile);
%           if success
%               fprintf('✓ %s 重置成功\n', checklists{i});
%           else
%               fprintf('✗ %s 重置失败\n', checklists{i});
%           end
%       end
%   end
%
%   % 安全的文件重置（备份现有文件）
%   function safeResetFile(srcFile, dstFile)
%       % 创建备份
%       [path, name, ext] = fileparts(dstFile);
%       backupFile = fullfile(path, [name, '_backup_', datestr(now, 'yyyymmdd'), ext]);
%       
%       if exist(dstFile, 'file')
%           copyfile(dstFile, backupFile);
%           fprintf('已创建备份: %s\n', backupFile);
%       end
%       
%       % 执行重置
%       success = resetFile(srcFile, dstFile);
%       
%       if ~success && exist(backupFile, 'file')
%           % 如果重置失败，询问是否恢复备份
%           answer = questdlg('重置失败，是否恢复备份文件？', ...
%                            '恢复确认', '是', '否', '否');
%           if strcmp(answer, '是')
%               copyfile(backupFile, dstFile, 'f');
%               fprintf('已恢复备份文件\n');
%           end
%       end
%   end
%
%错误处理:
%   - 捕获copyfile的所有异常
%   - 提供用户友好的错误消息
%   - 支持重试机制
%   - 递归处理权限问题
%
%递归调用:
%   函数在用户选择"继续"时会递归调用自身，
%   直到操作成功或用户选择取消。
%
%文件锁定常见原因:
%   - Excel文件在Excel中打开
%   - 文档文件在Word中打开
%   - 日志文件被应用程序锁定
%   - 文件权限设置为只读
%
%最佳实践:
%   - 在调用前检查源文件是否存在
%   - 为重要文件创建备份
%   - 在批量操作中妥善处理失败情况
%   - 记录操作日志便于故障排除
%
%依赖项:
%   copyfile - MATLAB文件复制函数
%   questdlg - MATLAB对话框函数
%
%参见:
%   createChecklist, copyfile, questdlg
%

%版本: 1.0
%日期: 2021-2024
%


success = false;
try
    copyfile(srcFileName, dstFileName, 'f');
    success = true;
catch
    answer = questdlg(['Access denied. Please check if the existing file is in use. ', ...
        'Close the file and select "Continue" to proceed. Select "Cancel" to abort.'], ...
        'File Permission', 'Continue', 'Cancel', 'Cancel');
    if strcmp(answer, 'Continue')
        resetFile(srcFileName, dstFileName);
    end
end

end
